package generator.config;

import lombok.Data;

/**
 * 代码生成器配置类
 *
 * @author xulei
 * @date 2025/10/12
 */
@Data
public class GeneratorConfig {
    
    /**
     * 数据库配置
     */
    private Database database = new Database();
    
    /**
     * 代码生成配置
     */
    private Code code = new Code();
    
    @Data
    public static class Database {
        /**
         * 数据库连接URL
         */
        private String url;
        
        /**
         * 数据库用户名
         */
        private String username;
        
        /**
         * 数据库密码
         */
        private String password;
        
        /**
         * 驱动类名
         */
        private String driverClassName;
    }
    
    @Data
    public static class Code {
        /**
         * 作者
         */
        private String author;
        
        /**
         * 实体类输出目录
         */
        private String entityOutputDir;
        
        /**
         * Mapper接口输出目录
         */
        private String mapperOutputDir;
        
        /**
         * XML映射文件输出目录
         */
        private String xmlOutputDir;
        
        /**
         * Service接口输出目录
         */
        private String serviceOutputDir;
        
        /**
         * Service实现类输出目录
         */
        private String serviceImplOutputDir;
        
        /**
         * Controller输出目录
         */
        private String controllerOutputDir;
        
        /**
         * 实体类后缀
         */
        private String entitySuffix = ""; // 默认为空字符串
        
        /**
         * 实体类继承的父类
         */
        private String entitySuperClass = ""; // 默认为空字符串
        
        /**
         * 忽略的字段列表(逗号分隔)
         */
        private String ignoreFields = ""; // 默认为空字符串
        
        /**
         * 是否使用自定义实体类注解
         */
        private boolean useCustomEntityAnnotations = false; // 默认不使用自定义注解
        
        /**
         * 是否生成额外的类（VO、DTO、Pagination）
         */
        private boolean generateExtraClasses = true; // 默认生成额外的类
        
        /**
         * 包配置
         */
        private Package pkg = new Package();
    }
    
    @Data
    public static class Package {
        /**
         * 实体类包名
         */
        private String entity;
        
        /**
         * Mapper接口包名
         */
        private String mapper;
        
        /**
         * XML映射文件包名
         */
        private String xml;
        
        /**
         * Service接口包名
         */
        private String service;
        
        /**
         * Service实现类包名
         */
        private String serviceImpl;
        
        /**
         * Controller包名
         */
        private String controller;
    }
}